本篇稍微列出使用Jackson處理request/response方法,如果已經熟悉的同學可以用自己喜歡的方式處理,並沒有限定怎麼做才是好的喔。
我們通常會針對資料定義設計出schema,通常也以此實作bean。但有時候因為資料或功能模組定義,針對同樣的項目(table/item)允許或需要操作的欄位(column/attribute)有所不同。當然,每支handler取得參數都還是需要完整確認資料內容的完整性,但是Json也提供了view來讓你直接定義不同情境下使用的屬性那些。
Jackson JSON Views
官方教學第一步,就是建立一個空的Views class,而這邊先假設情境request/response使用的內容不同,我們可以這樣定義
public class Views {
public static class Public {}
public static class Request extends Public {}
public static class Response extends Public {}
}
最主要就是能讓你使用class type當作參數用在annotation描述定義
@JsonView({ Views.Public.class })
private String firstName;
@JsonView({ Views.Public.class })
private String lastName;
@JsonView({ Views.Public.class })
private String email;
@JsonView({ Views.Request.class })
private String password;
@JsonView({ Views.Response.class })
private Date create_date;
@JsonView({ Views.Response.class })
private Date update_date;
如果這樣實作,可以表示firstName、lastName、email在request/response都有用到。password只有request會用到。create_date、update_date只有response會使用到。
這時候之前先準備好的View參數就有用了,我們可以應用view取得request
Person person = input.getBody(Person.class, Views.Request.class);
或是使用view產生response,避免不需要的內容出現在不適合的地方
return new ResponseBean(person, Views.Response.class);
當然,上面Views的設計只是方便舉例,實際上開那些Views還是要看實務需要而定。
Java Date如果直接對應json預設是數值 (number of milliseconds since January 1st, 1970, UTC) ,使用上還得自己轉換很不方便,可以使用format對應格式化字串如下
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd hh:mm:ss")
private Date create_date;
寫到這邊發現我目前用到的json annotation也不多,比較多是設計上的變化,之後遇到實用的再回來補充吧...